package cn.thinkluck.pattern.factory.simple;

/**
 * 资源加载
 * @Author liutao
 * @DateTime 2024/7/15 下午10:27
 */
public class ResourceLoader {
    /**
     * 使用工厂的资源加载示例
     * @param url 资源url file:// http:// ftp:// classpath:
     * @return 资源
     */
    public Resource loadByFactory(String url) {
        return new ResourceFactory().create(url);
    }
    /**
     * 未使用工厂的资源加载示例
     *
     * @param url 资源url file:// http:// ftp:// classpath:
     * @return 资源
     */
    public Resource load(String url) {
        //1. 根据url获取前缀
        String prefix = getPrefix(url);
        //2. 根据前缀加载资源
        switch (prefix) {
            case "file":
                return loadFile(url);
            case "http":
                return loadHttp(url);
            case "ftp":
                return loadFtp(url);
            case "classpath":
                return loadClasspath(url);
            default:
                throw new ResourceLoaderException("url prefix is not support");
        }
    }

    private Resource loadClasspath(String url) {
        //业务逻辑示例
        //发起请求下载资源
        //建立流
        //异常处理
        return null;
    }

    private Resource loadFtp(String url) {
        //业务逻辑示例
        //发起请求下载资源
        //建立流
        //异常处理
        return null;
    }

    private Resource loadHttp(String url) {
        //业务逻辑示例
        return null;
    }

    private Resource loadFile(String url) {
        //业务逻辑示例
        //发起请求下载资源
        //建立流
        //异常处理
        return null;
    }

    private String getPrefix(String url) {
        if (url == null || url.isEmpty()) {
            throw new ResourceLoaderException("url is null");
        }
        String[] split = url.split(":");
        return split[0];
    }
}
